package Pong;

import java.awt.*;
import java.awt.event.*;
import java.net.*;
import javax.swing.*;
import java.io.*;

public class HoofdPaneel extends JPanel {
	
	private static final long serialVersionUID = 1L; //automatisch geplaatst door Eclipse, anders warning
	
	private TekenPaneel tekenpaneel; //meegeven van het tekenpaneel zodat het hoofdpaneel aan de methoden kan
	private JTextField IPVak;	//Een tekstvak om het IP-adres in te voeren naar welke server je wil connecten
	private JButton ClientKnop,ServerKnop,StopKnop,StartKnop;	
	private Server server;
	private Client client;
	boolean pserver,pclient;	//Een boolean om te weten ofdat de speler een client of server is
	
	public HoofdPaneel(TekenPaneel tekenpaneel) {
		this.setBackground(Color.WHITE);
		this.tekenpaneel = tekenpaneel;
		
		try { //try-catch voor het opvangen van de IOException die InetAddress.getLocalHost().getHostAddress()) zal gooien
			this.setBorder(BorderFactory.createTitledBorder("My IP: "+InetAddress.getLocalHost().getHostAddress()));
		}
		catch(IOException ioe) {
			ioe.printStackTrace();
		}
		
		ServerKnop = new JButton("Ik ben Server");
		ServerKnop.addActionListener( new ServerHandler());
		ServerKnop.setBounds(50,80,110,27);
		this.add(ServerKnop);
		
		ClientKnop = new JButton("Ik ben Client");
		ClientKnop.addActionListener( new ClientHandler());
		ClientKnop.setBounds(50,80,110,27);
		this.add(ClientKnop);
		
		StartKnop = new JButton("Start");
		StartKnop.addActionListener( new StartHandler());
		StartKnop.setBounds(50,80,110,27);
		StartKnop.setVisible(false);
		this.add(StartKnop);
		
		StopKnop = new JButton("Stoppen");
		StopKnop.addActionListener( new StopHandler());
		StopKnop.setBounds(50,80,110,27);
		StopKnop.setVisible(false);
		this.add(StopKnop);
		
		IPVak = new JTextField("localhost");
		IPVak.setBounds(-10,0,110,27);
		this.add(IPVak);
	}
	
	class ServerHandler implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			ServerKnop.setVisible(false);
			ClientKnop.setVisible(false);
			StartKnop.setVisible(true);
			StopKnop.setVisible(true);
			IPVak.setVisible(false);
			
			server = new Server();
			server.start();
			client = new Client("localhost",tekenpaneel);
			client.start();
			pserver = true;

		}	
	}
	
	class ClientHandler implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			ServerKnop.setVisible(false);
			ClientKnop.setVisible(false);
			StopKnop.setVisible(true);
			IPVak.setVisible(false);
			
			client = new Client(IPVak.getText(),tekenpaneel);
			client.start();
			pclient = true;
			
		}	
	}
	
	class StartHandler implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			
			StartKnop.setVisible(false);

			server.startspel();

		}	
	}
	
	class StopHandler implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			ServerKnop.setVisible(true);
			ClientKnop.setVisible(true);
			StartKnop.setVisible(false);
			StopKnop.setVisible(false);
			IPVak.setVisible(true);
			
			if(pserver){
				server.thstop();
				server = null;
				pserver = false;
			}
			
			if(pclient){
				client.thstop();
				client = null;
				pclient = false;
			}
			System.exit(-1);
		}	
	}
}